using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ReadyToUseTools._Elevation
{
    /// <summary>
    /// <para>Summarize Elevation</para>
    /// <para>Calculates summary statistics of elevation for each input feature.</para>
    /// <para>计算每个输入要素的高程汇总统计数据。</para>
    /// </summary>    
    [DisplayName("Summarize Elevation")]
    public class SummarizeElevation : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SummarizeElevation()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_InputFeatures">
        /// <para>Input Features</para>
        /// <para>The input point, line, or area features for which the elevation will be summarized.</para>
        /// <para>将汇总高程的输入点、线或面要素。</para>
        /// </param>
        public SummarizeElevation(object _InputFeatures)
        {
            this._InputFeatures = _InputFeatures;
        }
        public override string ToolboxName => "Ready To Use Tools";

        public override string ToolName => "Summarize Elevation";

        public override string CallName => "agolservices.SummarizeElevation";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_InputFeatures, _FeatureIDField, _DEMResolution.GetGPValue(), _IncludeSlopeAspect.GetGPValue(), _OutputSummary];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input point, line, or area features for which the elevation will be summarized.</para>
        /// <para>将汇总高程的输入点、线或面要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _InputFeatures { get; set; }


        /// <summary>
        /// <para>Feature ID Field</para>
        /// <para>The unique ID field to use for the input features.</para>
        /// <para>用于输入要素的唯一 ID 字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _FeatureIDField { get; set; } = null;


        /// <summary>
        /// <para>DEM Resolution</para>
        /// <para><xdoc>
        ///   <para>Specifies the approximate spatial resolution (cell size) of the source elevation data used for the calculation.</para>
        ///   <para>The resolution keyword is an approximation of the spatial resolution of the digital elevation model. Many elevation sources are distributed in units of arc seconds; the keyword is an approximation in meters for easier understanding.</para>
        ///   <bulletList>
        ///     <bullet_item>Finest—The finest units available for the extent are used.</bullet_item><para/>
        ///     <bullet_item>10 meters—The elevation source resolution is 1/3 arc second or approximately 10 meters.</bullet_item><para/>
        ///     <bullet_item>24 meters—The elevation source is the Airbus WorldDEM4Ortho dataset at 24 meters resolution.</bullet_item><para/>
        ///     <bullet_item>30 meters—The elevation source resolution is 1 arc second or approximately 30 meters.</bullet_item><para/>
        ///     <bullet_item>90 meters—The elevation source resolution is 3 arc seconds or approximately 90 meters. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定用于计算的源高程数据的近似空间分辨率（像元大小）。</para>
        ///   <para>resolution 关键字是数字高程模型空间分辨率的近似值。许多高程源以角秒为单位分布;关键字是以米为单位的近似值，以便于理解。</para>
        ///   <bulletList>
        ///     <bullet_item>最佳 - 使用范围中可用的最精细单位。</bullet_item><para/>
        ///     <bullet_item>10 米 - 高程源分辨率为 1/3 角秒或大约 10 米。</bullet_item><para/>
        ///     <bullet_item>24 米 - 高程源为分辨率为 24 米的 Airbus WorldDEM4Ortho 数据集。</bullet_item><para/>
        ///     <bullet_item>30 米 - 高程源分辨率为 1 角秒或大约 30 米。</bullet_item><para/>
        ///     <bullet_item>90 米 - 高程源分辨率为 3 角秒或大约 90 米。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("DEM Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _DEMResolution_value? _DEMResolution { get; set; } = null;

        public enum _DEMResolution_value
        {
            /// <summary>
            /// <para>Finest</para>
            /// <para>Finest—The finest units available for the extent are used.</para>
            /// <para>最佳 - 使用范围中可用的最精细单位。</para>
            /// </summary>
            [Description("Finest")]
            [GPEnumValue("FINEST")]
            _FINEST,

            /// <summary>
            /// <para>10 meters</para>
            /// <para>10 meters—The elevation source resolution is 1/3 arc second or approximately 10 meters.</para>
            /// <para>10 米 - 高程源分辨率为 1/3 角秒或大约 10 米。</para>
            /// </summary>
            [Description("10 meters")]
            [GPEnumValue("10m")]
            _10m,

            /// <summary>
            /// <para>24 meters</para>
            /// <para>24 meters—The elevation source is the Airbus WorldDEM4Ortho dataset at 24 meters resolution.</para>
            /// <para>24 米 - 高程源为分辨率为 24 米的 Airbus WorldDEM4Ortho 数据集。</para>
            /// </summary>
            [Description("24 meters")]
            [GPEnumValue("24m")]
            _24m,

            /// <summary>
            /// <para>30 meters</para>
            /// <para>30 meters—The elevation source resolution is 1 arc second or approximately 30 meters.</para>
            /// <para>30 米 - 高程源分辨率为 1 角秒或大约 30 米。</para>
            /// </summary>
            [Description("30 meters")]
            [GPEnumValue("30m")]
            _30m,

            /// <summary>
            /// <para>90 meters</para>
            /// <para>90 meters—The elevation source resolution is 3 arc seconds or approximately 90 meters. This is the default.</para>
            /// <para>90 米 - 高程源分辨率为 3 角秒或大约 90 米。这是默认设置。</para>
            /// </summary>
            [Description("90 meters")]
            [GPEnumValue("90m")]
            _90m,

        }

        /// <summary>
        /// <para>Include Slope and Aspect</para>
        /// <para><xdoc>
        ///   <para>Specifies whether slope and aspect values for the input features will be included in the output in addition to the elevation values.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Slope and aspect values will be included in the output.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Slope and aspect values will not be included in the output. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定除高程值外，输入要素的坡度和坡向值是否也包含在输出中。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 坡度和纵向值将包含在输出中。</bullet_item><para/>
        ///     <bullet_item>未选中 - 坡度和纵向值将不包括在输出中。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Include Slope and Aspect")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _IncludeSlopeAspect_value _IncludeSlopeAspect { get; set; } = _IncludeSlopeAspect_value._false;

        public enum _IncludeSlopeAspect_value
        {
            /// <summary>
            /// <para>SLOPE_ASPECT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SLOPE_ASPECT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_SLOPE_ASPECT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_SLOPE_ASPECT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Summary</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Summary")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _OutputSummary { get; set; }


        public SummarizeElevation SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}